﻿#pragma once

#include "ASL.h"

// 典型飞行仿真工程
class F16Simulation
{
public:
    // 构造函数
    F16Simulation();

    // 析构函数
    ~F16Simulation();

    // 准备函数
    void setup(void);

    // 初始化函数
    void initialize(std::string resourceDir);

    // 单步运行函数
    void step(void);

    // 操纵指令函数
    void autopilot(void);

private:
    // 仿真开始时间 s
    double startTime;

    // 仿真停止时间 s
    double stopTime;

    // 仿真计算步长 s
    double stepSize;

    // 当前仿真时间 s
    double currentTime;

    // 当前仿真周期计数
    int currentCount;

    // 飞行器系统数学模型
    ASL::MassProperty cMassModel;
    ASL::F16AeroDynamics cAeroModel;
    ASL::F100PW229Turbine cTurbineModel;
    ASL::F16ControlSystem cControlModel;
    ASL::LandingGear cLandingGearModel;
    ASL::Actuator cAileronActutor;
    ASL::Actuator cRudderActutor;
    ASL::Actuator cElevatorActutor;
    ASL::Actuator cLeadingActutor;
    ASL::Actuator cTrailingActutor;
    ASL::Actuator cSpeedActutor;
    ASL::Actuator cFlapActutor;

    // 大气环境模型
    ASL::ISA cAtmosModel;

    // 六自由度运动学模型
    ASL::DOF6ECEF cDOFModel;

    // 数据记录文件流
    std::ofstream cStream;
};

// 典型飞行仿真工程
class B737Simulation
{
public:
    // 构造函数
    B737Simulation();

    // 析构函数
    ~B737Simulation();

    // 准备函数
    void setup(void);

    // 初始化函数
    void initialize(std::string resourceDir);

    // 单步运行函数
    void step(void);

    // 操纵指令函数
    void autopilot(void);

private:
    // 仿真开始时间 s
    double startTime;

    // 仿真停止时间 s
    double stopTime;

    // 仿真计算步长 s
    double stepSize;

    // 当前仿真时间 s
    double currentTime;

    // 当前仿真周期计数
    int currentCount;

    // 飞行器系统数学模型
    ASL::MassProperty cMassModel;
    ASL::B737AeroDynamics cAeroModel;
    ASL::CFM56Turbine cTurbineLModel;
    ASL::CFM56Turbine cTurbineRModel;
    ASL::B737ControlSystem cControlModel;
    ASL::LandingGear cLandingGearModel;
    ASL::Actuator cAileronActutor;
    ASL::Actuator cRudderActutor;
    ASL::Actuator cElevatorActutor;
    ASL::Actuator cFlapActutor;
    ASL::Actuator cSpeedActutor;
    ASL::Actuator cSpoilerActutor;

    // 大气环境模型
    ASL::ISA cAtmosModel;

    // 六自由度运动学模型
    ASL::DOF6ECEF cDOFModel;

    // 数据记录文件流
    std::ofstream cStream;

    // 微分器
    ASL::Calculus cAlphaDot;
    ASL::Calculus cBetaDot;
};

// 典型飞行仿真工程
class X24Simulation
{
public:
    // 构造函数
    X24Simulation();

    // 析构函数
    ~X24Simulation();

    // 准备函数
    void setup(void);

    // 初始化函数
    void initialize(std::string resourceDir);

    // 单步运行函数
    void step(void);

    // 操纵指令函数
    void autopilot(void);

private:
    // 仿真开始时间 s
    double startTime;

    // 仿真停止时间 s
    double stopTime;

    // 仿真计算步长 s
    double stepSize;

    // 当前仿真时间 s
    double currentTime;

    // 当前仿真周期计数
    int currentCount;

    // 飞行器系统数学模型
    ASL::MassProperty cMassModel;
    ASL::X24AeroDynamics cAeroModel;
    ASL::XLR99Rocket cRocketModel;
    ASL::X24ControlSystem cControlModel;
    ASL::LandingGear cLandingGearModel;
    ASL::Actuator cAileronActutor;
    ASL::Actuator cRudderActutor;
    ASL::Actuator cElevatorActutor;

    // 大气环境模型
    ASL::ISA cAtmosModel;

    // 六自由度运动学模型
    ASL::DOF6ECEF cDOFModel;

    // 数据记录文件流
    std::ofstream cStream;
};
